package com.zy.Lambda;

import org.junit.Test;

import java.util.ArrayList;
import java.util.function.Predicate;

public class lambda
{
    //实现接口
    @Test
    public void test1()
    {
        intSumImpl sum=new intSumImpl();
        int result=sum.calculateSum(2,3);
        System.out.println("两数的和为："+result);
    }

    //使用匿名内部类
    @Test
    public void test2()
    {
        intSum sum=new intSum() {
            @Override
            public int calculateSum(int a, int b)
            {
                return a+b;
            }
        };
        int result=sum.calculateSum(2,4);
        System.out.println("两数的和为："+result);
    }

    /*
     使用lamba表达式
     若只有一个参数，小括号可省略，若函数体只有一条语句，则return和大括号均可省略
     */
    //无参数无返回值
    @Test
    public void test3()
    {
        Runnable a=new Runnable() {
            @Override
            public void run()
            {
                System.out.println("hahahhah--");
            }
        };
        a.run();

        //等同于
        Runnable a1=()-> System.out.println("hahahhahah----");
        a1.run();
    }

    //使用Lamda表达式实现intSum接口
    @Test
    public void test5()
    {
        intSum sum=(a,b)->a+b;
        int result=sum.calculateSum(2,3);
        System.out.println("两数的和为："+result);
    }

    @Test
    public void test6()
    {
        //使用断言类型接口，过滤集合元素
        ArrayList<Integer> list=new ArrayList<>();
        ArrayList<Integer> answer=new ArrayList<>();
        list.add(121);
        list.add(12);
        list.add(30);
        list.add(134);
        Predicate<Integer> predicate=x->x>100;
        for(Integer i:list)
            if(predicate.test(i))
                answer.add(i);
        System.out.println(answer);
    }

}
